package com.zhouzi.zhaoyang.util

import android.app.Activity
import android.util.Log
import java.util.*


/**
 * Created by ZhouZi on 2019/4/4.
 * time:11:39
 * ----------Dragon be here!----------/
 * 　　　┏┓　　 ┏┓
 * 　　┏┛┻━━━┛┻┓━━━
 * 　　┃　　　　　 ┃
 * 　　┃　　　━　  ┃
 * 　　┃　┳┛　┗┳
 * 　　┃　　　　　 ┃
 * 　　┃　　　┻　  ┃
 * 　　┃　　　　   ┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛━━━━━
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━━━━━━神兽出没━━━━━━━━━━━━━━
 */
class AppManager private constructor() {

    private var mActivityStack: Stack<Activity>? = null

    companion object {
        private var manager: AppManager? = null
            get() {
                if (field == null) {
                    field = AppManager()
                }
                return field
            }

        fun getInstance(): AppManager {
            return manager!!
        }
    }

    /**
     * 添加activity到堆栈
     */
    fun addActivity(activity: Activity?) {
        if (mActivityStack == null) {
            mActivityStack = Stack()
        }
        mActivityStack?.add(activity)
        Log.d("AppManager", mActivityStack.toString())
    }

    fun removeActivity(activity: Activity?) {
        if (mActivityStack == null) {
            mActivityStack = Stack()
        }
        mActivityStack?.remove(activity)
        Log.d("AppManager", mActivityStack.toString())
    }

    fun finishOtherActivity(cls: Class<*>) {
        if (mActivityStack != null) {
            val it = mActivityStack!!.iterator()
            while (it.hasNext()) {
                val temp = it.next()
                if (temp != null && temp.javaClass != cls) {
                    temp.finish()
                }
            }
        }
    }


    fun finishActivity(cls: Class<*>) {
        if (!mActivityStack.isNullOrEmpty()) {
            val it = mActivityStack!!.iterator()
            while (it.hasNext()) {
                val temp = it.next()
                if (temp != null && temp.javaClass == cls) {
                    temp.finish()
                }
            }
        }

    }

    /**
     * 结束所有Activity
     */
    fun finishAllActivity() {

        if (!mActivityStack.isNullOrEmpty()) {
            for (activity in mActivityStack!!) {
                activity.finish()
            }
            mActivityStack!!.clear()
        }
    }

    /**
     * 退出应用程序
     */
    fun exitApp() {
        try {
            finishAllActivity()
            // 退出JVM(java虚拟机),释放所占内存资源,0表示正常退出(非0的都为异常退出)
            System.exit(0)
            // 从操作系统中结束掉当前程序的进程
            android.os.Process.killProcess(android.os.Process.myPid())
        } catch (e: Exception) {
            Log.e("Exit exception", e.toString())
        }
    }

}